package com.ls.utils;

import com.ls.constant.SystemConstants;

import java.sql.Timestamp;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

/**
 * @ClassName DateTimeUtils
 * @Description 时间工具类
 * @Author TangQuanBin
 * @Date 2019/9/17 16:05
 * @Version 1.0
 **/
public class DateTimeUtil {

    public static final String DEFAULT_FORMAT_DATE = "yyyy-MM-dd HH:mm:ss";
    public static final String FORMAT_YMD = "yyyyMMdd";

    /**
     * 获取当前时间
     * @return
     */
    public static Timestamp now(){
        return new Timestamp(System.currentTimeMillis());
    }

    /**
     * @return 返回文本信息的日期对应的格林威治标准时间（1970年1月1日00:00:00.000）的偏移量,单位是毫秒。 1秒=1000毫秒。
     * @param format
     *            "yyyy-MM-dd HH:mm:ss:SSS"或"yyyy-MM-dd HH:mm:ss"。
     */
    public static long dateTimeParse(String datetime, String format) {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        try {
            Date date = sdf.parse(datetime);
            return date.getTime();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
        }
        return 0;
    }

    /**
     * date转string
     * @param date Date
     * @param formatStr 格式
     * @return
     */
    public static String formatDateToString(Date date, String formatStr) {
        return (new SimpleDateFormat((formatStr == null ? DEFAULT_FORMAT_DATE
                : formatStr))).format(date);
    }

    /**
     *  string转date
     * @param dateStr 时间字符串
     * @param formatStr 格式
     * @return
     */
    public static Date formatStringToDate(String dateStr, String formatStr) throws ParseException {
        return (new SimpleDateFormat((formatStr == null ? DEFAULT_FORMAT_DATE
                : formatStr))).parse(dateStr);
    }

    /**
     * 比较两个时间，如果endtime晚于begintime，则返回true，否则返回false
     * @param beginTime
     * @param endTime
     * @return
     */
    public static boolean beginTimeisBeforeEndTime(String beginTime, String endTime) {
        long begin = dateTimeParse(beginTime, DEFAULT_FORMAT_DATE);
        long end = dateTimeParse(endTime, DEFAULT_FORMAT_DATE);
        return end > begin;
    }

    public static boolean beginTimeisBeforeEndTime(Date beginTime, Date endTime) {
        long begin = beginTime.getTime();
        long end = endTime.getTime();
        return end > begin;
    }
    /**
     *  string转date加日期
     * @param dateStr 时间字符串
     * @param daynum 天数
     * @return
     */
    public static Date formatStringToDateAddDay(String dateStr,Integer daynum) throws ParseException {
        if(dateStr.length()<= SystemConstants.DATE_LENGTH)
        {
            dateStr=dateStr+" 00:00:00";
        }
        else{
            return (new SimpleDateFormat(DEFAULT_FORMAT_DATE)).parse(dateStr);
        }
        SimpleDateFormat sdf=new SimpleDateFormat(DEFAULT_FORMAT_DATE);
        Calendar calendar=new GregorianCalendar();
        Date date=sdf.parse(dateStr);
        calendar.setTime(date);
        calendar.add(Calendar.DAY_OF_MONTH,daynum);
        return calendar.getTime();
    }
    public static Date formatStringToDateTime(String dateStr, String formatStr) throws ParseException {
        if(dateStr.length()<= SystemConstants.DATE_LENGTH)
        {
            dateStr=dateStr+" 00:00:00";
        }
        return (new SimpleDateFormat((formatStr == null ? DEFAULT_FORMAT_DATE
                : formatStr))).parse(dateStr);
    }

}
